package cn.dglydrpy.study.j2ee.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.junit.Test;

/**
 * 通过继承HttpServlet的方式写一个servlet
 */
public class HelloHttpServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	/*
	 * Servlet容器在收到请求后，会调用Servlet的service方法来处理请求，容器会事先创建好请求对象和响应对象，
	 * 其中，request对象封装了请求数据包里面的所有数据
	 * 我们可以将处理结果写到response对象里面，然后容器负责从response对象获取结果，然后打包发送给浏览器
	 */
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");//设置消息头类型，utf-8防Out输出时的中文乱码
		PrintWriter out = response.getWriter(); //获取输出流
		out.println("<h1>Hello Kitty</h1>");//把数据写到response对象中,Servlet容器会将该对象里面的数据取出来，打一个包（响应数据包），然后发送给浏览器
		out.println("<h1>"+new SimpleDateFormat("YYYY-M-dd").format((new Date()))+"</h1>");


		//request的API
		//request.getParameter("name");返回value值，此value值一定是字符串。   eg:?name=value
		//Integer number = Integer.parseInt(request.getParameter("id"));
		System.out.println(request.getMethod()); //请求方式
		System.out.println(request.getServletPath()); //请求资源路径 /hello
		System.out.println(request.getProtocol());//http协议版本 

		Enumeration e = request.getHeaderNames(); //消息头
		while(e.hasMoreElements()){
			String key = (String) e.nextElement();
			System.out.println(key+": "+request.getHeader(key));
		}

		//4个路径的区别:
		System.out.println(request.getContextPath()); // 应用上下文   /j2ee
		System.out.println(request.getServletPath());//  servlet的配置请求路径   /hello
		System.out.println(request.getRequestURI());//   上面2个拼接   /j2ee/hello
		System.out.println(request.getRequestURL());//   带上ip和端口    http://localhost:8080/j2ee/hello
		
		out.close();//容器可自动关闭流，可省略流的关闭
	}
	
	/**
	 * 编码不同导致中文乱码
	 * @throws UnsupportedEncodingException
	 */
	@Test
	public void test() throws UnsupportedEncodingException {
		String str="中文";
		String str2 = URLEncoder.encode(str,"UTF-8"); //浏览器按UTF-8来编码
		System.out.println(str2);
		String str3 = URLDecoder.decode(str2,"UTF-8");//服务器默认按ISO-8859-1来解码，就造成中文乱码
		System.out.println(str3);		
	}
}
